2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

Kafka Consumer

작성: sangseek | 게시 날짜: 2025/11/12 | 조회수: 22
[ 편집불가 ]

Kafka Consumer는 Apache Kafka에서 메시지(레코드)를 읽어들이는 클라이언트 구성요소입니다. 토픽의 파티션에 저장된 메시지를 폴링(poll)하여 애플리케이션으로 전달하고, 오프셋(offset)을 관리하여 어디까지 읽었는지를 추적하는 역할을 합니다. 주요 개념과 동작 - 소비자(Consumer)와 토픽 파티션: 각 토픽은 여러 파티션으로 구성되고, 소비자는 파티션 단위로 메시지를 읽습니다. 하나의 파티션은 한 소비자 인스턴스가 독점적으로 읽습니다. - 컨슈머 그룹(Consumer Group): 같은 group.id를 가진 소비자들의 집합입니다. 그룹 내에서 파티션은 멤버들 사이에 분배되어 병렬 소비가 가능해집니다. 그룹은 확장(멤버 추가/제거) 시 리밸런싱을 수행합니다. - 오프셋(offset): 파티션 내 메시지의 위치를 나타내는 숫자입니다. 소비자는 읽은 마지막 오프셋(또는 다음 읽을 오프셋)을 커밋(commit)하여 재시작 시 이어서 읽을 수 있게 합니다. 커밋 정보는 내부 토픽(__consumer_offsets)에 저장됩니다. - 폴링 모델: 소비자는 일정 주기로 poll()을 호출해 메시지를 가져옵니다. poll 호출이 없으면 브로커는 소비자가 죽었다고 판단해 리밸런스를 트리거할 수 있습니다. - 커밋 방식: 자동 커밋(enable.auto.commit) 또는 수동 커밋(commitSync/commitAsync)을 사용합니다. 수동 커밋을 통해 메시지 처리 성공 시점에 오프셋을 안전하게 기록할 수 있습니다. 배달 의미(처리 보장) - at-most-once: 오프셋을 먼저 커밋하면 중복 없이 최대 한 번(메시지 손실 가능) 처리됩니다. - at-least-once: 메시지 처리 후 오프셋을 커밋하면 재시도 시 중복 처리 가능성이 있습니다(중복 허용). - exactly-once(응용 수준): Kafka Streams나 트랜잭션(프로듀서 트랜잭션 + read-process-write 패턴, isolation.level=read_committed 등)을 사용해 종단간 정확히 한 번 처리를 구현할 수 있지만, 단순 소비자만으로는 보장이 복잡합니다. 리밸런싱과 코디네이터 - 컨슈머 그룹 코디네이터(kafka group coordinator)가 그룹 멤버십과 파티션 할당을 관리합니다. 멤버 변화나 토픽 파티션 변화 시 리밸런스가 발생하며, 이 동안 메시지 처리가 중단될 수 있습니다. - 할당 전략: range, roundrobin, sticky 등 여러 전략이 있습니다. 주요 설정(자주 쓰이는 것들) - bootstrap.servers: Kafka 브로커 접속 정보 - group.id: 컨슈머 그룹 식별자 - key.deserializer / value.deserializer: 역직렬화 설정 - enable.auto.commit: 자동 오프셋 커밋 여부 - auto.commit.interval.ms: 자동 커밋 주기 - session.timeout.ms / heartbeat.interval.ms / max.poll.interval.ms: 리밸런스와 관련된 타임아웃들 - fetch.max.bytes, max.partition.fetch.bytes: 가져올 데이터 크기 관련 설정 API 및 라이프사이클(일반적인 흐름) - 생성(설정) → subscribe(토픽 구독) 또는 assign(직접 파티션 할당) → 주기적으로 poll() → 메시지 처리 → (필요 시) commitSync/commitAsync → 종료 시 close() - 예외 처리: 네트워크 오류, 리밸런스 중 wakeup(), Interrupt 처리 등 고려 필요 운영 관점의 주의점 - 커밋 타이밍과 실패 시 중복/손실 가능성 이해 - 리밸런스로 인한 처리 지연(특히 빈번한 멤버 변화 주의) - 폴링 루프에서 너무 오래 처리하면 max.poll.interval.ms 초과로 강제 리밸런스 발생 - 컨슈머 레이턴시(consumer lag) 모니터링 필요 클라이언트 - Java 공식 클라이언트 외에도 Python, Go, C/C++ 등 다양한 언어용 클라이언트 라이브러리가 존재합니다(예: confluent-kafka, kafka-python). 요약 Kafka Consumer는 토픽의 메시지를 읽고 오프셋을 관리하여 장애 복구와 병렬 처리를 가능하게 하는 구성요소입니다. 컨슈머 그룹, 오프셋 커밋, 리밸런싱, 폴링 모델과 같은 개념을 이해하는 것이 안정적이고 정확한 메시지 처리를 위해 중요합니다.
내용이 부정확하다면 싫어요를 누르세요.